﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using grupo2DEWStudio7i.Dominio;
using System.Data.SqlClient;

namespace grupo2DEWStudio7i.Persistencia.ADO
{
    public class DetalleReservaDAO : IDetalleReservaDAO
    {
        IServicioDAO servicioDAO = new ServicioDAO();
        IInstrumentoDAO instrumentoDAO = new InstrumentoDAO();
        public DetalleReserva Crear(DetalleReserva detalleACrear)
        {
            string _Sentencia = @"INSERT INTO detallereserva (codigoReserva, codigoServicio, codigoInstrumento, costo) 
                VALUES(@codigoReserva, @codigoServicio, @codigoInstrumento, @costo)";
            int _Codigo = detalleACrear.CodigoReserva;
            decimal _Total = detalleACrear.Costo;
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigoreserva", _Codigo));

                    if (detalleACrear.Servicio != null)
                        _Comando.Parameters.Add(new SqlParameter("@codigoservicio", detalleACrear.Servicio.Codigo));
                    else
                        _Comando.Parameters.Add(new SqlParameter("@codigoservicio", DBNull.Value));

                    if (detalleACrear.Instrumento != null)
                        _Comando.Parameters.Add(new SqlParameter("@codigoinstrumento", detalleACrear.Instrumento.CodInstrumento));
                    else
                        _Comando.Parameters.Add(new SqlParameter("@codigoinstrumento", DBNull.Value));

                    _Comando.Parameters.Add(new SqlParameter("@costo", detalleACrear.Costo));
                    _Comando.ExecuteNonQuery();
                }
            }
            return Obtener(_Codigo);
        }

        public DetalleReserva Obtener(int codigo)
        {
            string _Sentencia = @"SELECT codigoreserva, codigoservicio, codigoinstrumento, costo
                FROM detalleReserva WHERE codigoreserva=@codigo";
            DetalleReserva detalleCreada = null;
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigo", codigo));
                    using (SqlDataReader _Resultado = _Comando.ExecuteReader())
                    {
                        if (_Resultado.Read())
                        {
                            detalleCreada = new DetalleReserva();
                            detalleCreada.CodigoReserva = (int)_Resultado["codigoreserva"];

                            if (_Resultado["codigoservicio"] != DBNull.Value)
                                detalleCreada.Servicio = servicioDAO.Obtener((int)_Resultado["codigoservicio"]);

                            if (_Resultado["codigoinstrumento"] != DBNull.Value)
                                detalleCreada.Instrumento = instrumentoDAO.Obtener((int)_Resultado["codigoinstrumento"]);

                            detalleCreada.Costo = (decimal)_Resultado["costo"];
                        }
                    }
                }
            }
            return detalleCreada;
        }

        public ICollection<DetalleReserva> ListarxReserva(int codigo)
        {
            string _Sentencia = @"SELECT codigoreserva, codigoservicio, codigoinstrumento, costo
                FROM detalleReserva WHERE codigoreserva=@codigo";
            ICollection<DetalleReserva> detalleSalaEncontrados = new List<DetalleReserva>();
            DetalleReserva detalleCreada = null;

            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigo", codigo));
                    using (SqlDataReader _Resultado = _Comando.ExecuteReader())
                    {
                        while (_Resultado.Read())
                        {
                            detalleCreada = new DetalleReserva();
                            detalleCreada.CodigoReserva = (int)_Resultado["codigoreserva"];

                            if (_Resultado["codigoservicio"] != DBNull.Value)
                                detalleCreada.Servicio = servicioDAO.Obtener((int)_Resultado["codigoservicio"]);

                            if (_Resultado["codigoinstrumento"] != DBNull.Value)
                                detalleCreada.Instrumento = instrumentoDAO.Obtener((int)_Resultado["codigoinstrumento"]);

                            detalleCreada.Costo = (decimal)_Resultado["costo"];

                            detalleSalaEncontrados.Add(detalleCreada);
                        }
                    }
                }
            }
            return detalleSalaEncontrados;
        }

        public DetalleReserva Modificar(DetalleReserva entidad)
        {
            throw new NotImplementedException();
        }

        public void Eliminar(DetalleReserva entidad)
        {
            throw new NotImplementedException();
        }

        public ICollection<DetalleReserva> ListarTodos()
        {
            throw new NotImplementedException();
        }


    }

}